<?php

App::import('Sanitize');

class TipologiasVialesController extends AppController {

    var $name = 'TipologiasViales';
    var $paginate = array(
        'order' => array('TipologiasViale.id ASC'),
        'limit' => 10,
    );

    function beforeFilter() {
        //parent::beforeFilter();
    }

    function index($tipologias_viale_id = null) {
        $this->__aux_index($tipologias_viale_id);
    }

    function admin_index($tipologias_viale_id = null) {
        $this->__aux_index($tipologias_viale_id);
    }

    function __aux_index($tipologias_viale_id = null) {
        $this->TipologiasViale->recursive = 0;
        $this->paginate['order'] = 'TipologiasViale.nombre';

        $tipologias = $this->TipologiasViale->find('list', array('fields' => array('TipologiasViale.id', 'TipologiasViale.nombre'), 'order' => 'TipologiasViale.nombre'));
        $tipologias['0'] = 'Todos';

        $condiciones = array();
        if (!empty($tipologias_viale_id))
            $this->data['TipologiasViale']['tipologias_viale_id'] = $tipologias_viale_id;

        $nombre = '';

        //si vienen datos del filtro
        if (!empty($this->data)) {
            if (isset($this->data['TipologiasViale']['tipologias_viale_id']) && !empty($this->data['TipologiasViale']['tipologias_viale_id'])) {
                $condiciones[] = "TipologiasViale.id = {$this->data['TipologiasViale']['tipologias_viale_id']}";
            }

            if (isset($this->data['TipologiasViale']['tipologias_viale_id']) && (!empty($this->data['TipologiasViale']['tipologias_viale_id']) || ($this->data['TipologiasViale']['tipologias_viale_id'] == '0'))) {
                $tipologias_viale_id = $this->data['TipologiasViale']['tipologias_viale_id'];
                $this->Session->write('tipologias_viale_id', $tipologias_viale_id);
            }

            if (isset($this->data['TipologiasViale']['nombre']) && !empty($this->data['TipologiasViale']['nombre'])) {
                $tipologia_vial = utf8_encode(strtolower(utf8_decode(trim($this->data['TipologiasViale']['nombre']))));
                $condiciones[] = "lower(TipologiasViale.nombre) LIKE '%{$tipologia_vial}%'";
                $nombre = $this->data['TipologiasViale']['nombre'];
                $this->Session->write('nombre', $nombre);
            }

            $this->Session->write('tipologias_filter', $condiciones);
        } elseif ($this->Session->check('tipologias_filter')) {//si tengo cargado un filtro en session
            //me fijo si esta cambiando de pagina o cambiando el limit
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                //si ya estaba siendo aplicado un filtro, lo sigo usando
                $condiciones = $this->Session->read('tipologias_filter');
                $tipologias_viale_id = ($this->Session->check('tipologias_viale_id')) ? $this->Session->read('tipologias_viale_id') : '';
                $nombre = ($this->Session->check('nombre')) ? $this->Session->read('nombre') : '';
            } else {
                //sino, lo borro de la session
                $this->Session->delete('tipologias_filter');
                $this->Session->delete('tipologias_viale_id');
                $this->Session->delete('nombre');
            }
        }
        $this->paginate['conditions'] = $condiciones;
        $referer = $this->referer();
        $this->set(compact('tipologias', 'tipologias_viale_id', 'nombre', 'referer'));
        $this->set('tipologiasViales', $this->paginate());
        $this->render('index');
    }

    function add() {
        $this->__aux_add();
    }

    function admin_add() {
        $this->__aux_add();
    }

    /**
     * Permite dar de alta una nueva tipología vial
     */
    function __aux_add() {
        if (!empty($this->data)) {
            $tipologiaviale_name = utf8_encode(strtolower(utf8_decode(trim($this->data['TipologiasViale']['nombre']))));
            // Chequeo si existe en la db una tipología vial con el mismo nombre
            $tipologiaviale = $this->TipologiasViale->find('all', array('conditions' => array('lower(TipologiasViale.nombre)' => $tipologiaviale_name)));
            if (empty($tipologiaviale)) {
                $this->TipologiasViale->create();
                if ($this->TipologiasViale->save($this->data)) {
                    $tipologias_viale_id = $this->TipologiasViale->id;
                    $this->Session->setFlash(__('La tipología vial se guardó correctamente.', true), 'flash_success');
                    $this->redirect(array('action' => 'admin_index', $tipologias_viale_id));
                } else {
                    $this->Session->setFlash(__('La tipología vial no se pudo guardar. Por favor, intente nuevamente.', true), 'flash_failure');
                }
            } else {
                $this->Session->setFlash(__('La tipología vial "' . $this->data['TipologiasViale']['nombre'] . '" ya existe.', true), 'flash_failure');
            }
        }
        $referer = $this->referer();
        $this->set(compact('referer'));
        $this->render('add');
    }

    function delete($id = null) {
        $this->__aux_delete($id);
    }

    function admin_delete($id = null) {
        $this->__aux_delete($id);
    }

    /**
     * Permite eliminar una tipología vial seleccionada si no existen rutas que pertenecen a esa tipología
     * @param <type> $id
     */
    function __aux_delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Tipología vial inválida', true), 'flash_failure');
        } else {
            // Chequeo que la tipología vial exista
            $tipologiaviale = $this->TipologiasViale->find('all', array('conditions' => array('TipologiasViale.id' => $id)));
            if (!empty($tipologiaviale)) {
                $tipologiaviale_name = $tipologiaviale[0]['TipologiasViale']['nombre'];
                // Chequeo si hay rutas que pertenecen a esa tipología vial
                $tipologiaviales = $this->Ruta->find('all', array('conditions' => array('Ruta.tipologias_viale_id' => $id)));
                if (!empty($tipologiaviales)) {
                    $this->Session->setFlash(__('La tipología vial "' . $tipologiaviale_name . '" no se puede eliminar porque existen rutas que pertenecen a dicha tipología.', true), 'flash_failure');
                } else {
                    if ($this->TipologiasViale->delete($id)) {
                        $this->Session->setFlash(__('La tipología vial "' . $tipologiaviale_name . '" se eliminó correctamente.', true), 'flash_success');
                    } else {
                        $this->Session->setFlash(__('La tipología vial no se pudo eliminar. Por favor, intente nuevamente.', true), 'flash_failure');
                    }
                }
            } else {
                $this->Session->setFlash(__('Tipología vial inválida', true), 'flash_failure');
            }
        }
        $this->redirect(array('action' => 'admin_index'));
    }

    function edit($id = null) {
        $this->__aux_edit($id);
    }

    function admin_edit($id = null) {
        $this->__aux_edit($id);
    }

    /**
     * Permite editar una tipología vial
     */
    function __aux_edit($id = null) {
        if (empty($id) && empty($this->data)) {
            $this->Session->setFlash(__('Tipología vial inválida', true), 'flash_failure');
            $this->redirect(array('action' => 'admin_add'));
        } elseif (empty($this->data)) {
            $this->data = $this->TipologiasViale->read(null, $id);
        } elseif (!empty($this->data)) {
            $tipologiaviale_name = utf8_encode(strtolower(utf8_decode(trim($this->data['TipologiasViale']['nombre']))));
            // Chequeo si existe en la db una tipología vial con el mismo nombre
            $tipologiaviale = $this->TipologiasViale->find('all', array('conditions' => array("TipologiasViale.id <>" => $id, 'lower(TipologiasViale.nombre)' => $tipologiaviale_name)));
            if (empty($tipologiaviale)) {
                if ($this->TipologiasViale->save($this->data)) {
                    $this->Session->setFlash(__('La tipología vial se guardó correctamente.', true), 'flash_success');
                    $this->redirect(array('action' => 'admin_index', $id));
                } else {
                    $this->Session->setFlash(__('La tipología vial no se pudo guardar. Por favor, intente nuevamente.', true), 'flash_failure');
                }
            } else {
                $this->Session->setFlash(__('La tipología vial "' . $this->data['TipologiasViale']['nombre'] . '" ya existe.', true), 'flash_failure');
            }
        }
        $referer = $this->referer();
        $this->set(compact('referer'));
        $this->render('edit');
    }

}
?>